package com.sc.test.smalltest;

import java.util.regex.Pattern;

/**
 * Created by Shen Chao.
 * Created on 2018-10-25.
 * <p>
 * ^匹配输入字符串的开始位置
 * $结束的位置
 * \转义字符 eg:\. 匹配一个. 字符  不是任意字符 ，转义之后让他失去原有的功能
 * \t制表符
 * \n换行符
 * \\w匹配字符串  eg:\w不能匹配 因为转义了
 * \w匹配包括字母数字下划线的任何单词字符
 * \s包括空格制表符换行符
 * *匹配前面的子表达式任意次
 * .小数点可以匹配任意字符
 * +表达式至少出现一次
 * ?表达式0次或者1次
 * {10}重复10次
 * {1,3}至少1-3次
 * {0,5}最多5次
 * {0,}至少0次 不出现或者出现任意次都可以 可以用*号代替
 * {1,}至少1次  一般用+来代替
 * []自定义集合     eg:[abcd]  abcd集合里任意字符
 * [^abc]取非 除abc以外的任意字符
 * |  将两个匹配条件进行逻辑“或”（Or）运算
 * [1-9] 1到9 省略123456789
 * 邮箱匹配 eg: ^[a-zA-Z_]{1,}[0-9]{0,}@(([a-zA-z0-9]-*){1,}\.){1,3}[a-zA-z\-]{1,}$
 * *
 */
public class CheckDataUitls {
    // 正则表达式：验证用户名
    private static final String REGEX_USERNAME = "^[a-zA-Z]\\w{5,20}$";

    // 正则表达式：验证密码
    private static final String REGEX_PASSWORD = "^[a-zA-Z0-9]{6,20}$";

    //正则表达式：验证手机号
    private static final String REGEX_MOBILE = "^((17[0-9])|(14[0-9])|(13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$";

    //正则表达式：验证邮箱
    private static final String REGEX_EMAIL = "^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";

    // 正则表达式：验证汉字
    private static final String REGEX_CHINESE = "^[\u4e00-\u9fa5],{0,}$";

    // 正则表达式：验证身份证
    private static final String REGEX_ID_CARD = "(^\\d{18}$)|(^\\d{15}$)";

    // 正则表达式：验证URL
    private static final String REGEX_URL = "http(s)?://([\\w-]+\\.)+[\\w-]+(/[\\w- ./?%&=]*)?";

    // 正则表达式：验证IP地址
    private static final String REGEX_IP_ADDR = "(25[0-5]|2[0-4]\\d|[0-1]\\d{2}|[1-9]?\\d)";

    // 校验用户名
    public static boolean isUsername(String username) {
        return Pattern.matches(REGEX_USERNAME, username);
    }

    //校验密码
    public static boolean isPassword(String password) {
        return Pattern.matches(REGEX_PASSWORD, password);
    }

    //校验手机号
    public static boolean isMobile(String mobile) {
        return Pattern.matches(REGEX_MOBILE, mobile);
    }

    //校验邮箱
    public static boolean isEmail(String email) {
        return Pattern.matches(REGEX_EMAIL, email);
    }

    //校验汉字
    public static boolean isChinese(String chinese) {
        return Pattern.matches(REGEX_CHINESE, chinese);
    }

    // 校验身份证
    public static boolean isIDCard(String idCard) {
        return Pattern.matches(REGEX_ID_CARD, idCard);
    }

    //校验URL
    public static boolean isUrl(String url) {
        return Pattern.matches(REGEX_URL, url);
    }

    // 校验IP地址
    public static boolean isIPAddr(String ipAddr) {
        return Pattern.matches(REGEX_IP_ADDR, ipAddr);
    }
}
